/**
 javascript数据类型：
     基本数据类型：
         Number:
         String:
         Boolean:
         Null
         Undefined
         Symbol
 \   引用数据类型：
        Object:
        Function
    （ 在JS中除了基本数据类型以外的都是对象，数据是对象，函数是对象，正则表达式是对象）


 基本数据类型和引用数据类型访问:
    1)基本类型值：存在栈中，按值访问，操作的是他们实际保存的值；
    2)引用类型值：栈中保存地址，堆中保存值，按引用访问，当查询时，
    我们需要先从栈中读取内存地址，然后再找到保存在堆内存中的值；

 基本数据类型和引用数据类型复制:
    1)基本类型变量的传递(复制)：（互不干涉）
        从一个变量向一个变量复制时，会在栈中创建一个新值，
       然后把值复制到为新变量分配的位置上，改变源数据不会影响到新的变量；
    2)引用类型变量的传递(浅复制)：（铁锁连横）
        复制的是存储在栈中的指针，将指针复制到栈中未新变量分配的空间中，
        而这个指针副本和原指针执行存储在堆中的同一个对象，复制操作结束后，
        两个变量实际上将引用同一个对象；因此改变其中的一个，将影响另一个；

    强制（parseInt,parseFloat,Number()） 隐式（==）

    == 会自动转换类型
    === 不会自动转换类型,先判断左右两边的数据类型，如果数据类型不一致，直接返回 false
**/



console.log(1 == '1') //true
console.log(1 === '1') //false
console.log(1 ==true) //true
console.log(1 ===true) //false
console.log(2 ==true) //false

console.log('----')

console.log(0 ==false) //true
console.log(0 ===false) //false
console.log(0 =='') //true
console.log(null==undefined) // true

console.log('---')

console.log(NaN == NaN)// false
console.log([] == false)// true
console.log([] == ![])// true
console.log({} === {})// false
console.log(NaN === NaN)// false

